﻿using System;
using System.Collections.Generic;
using Atendex.Dominio;
using Atendex.Dominio.ActiveRecord;

namespace Atendex.Containex
{
    public static class Container
    {
        public static IAreaNegocio CriarAreaNegocio(string nome, string email)
        {
            return new AreaNegocioAR(nome, email);
        }

        public static IAtendente CriarAtendente(string nome, string login, string senha)
        {
            return new AtendenteAR(nome, login,  senha);
        }

        public static IAtendimento CriarAtendimento(IAtendente atendente)
        {
            return new AtendimentoAR(atendente);
        }

        public static IMensagem CriarMensagem(string texto)
        {
            return new MensagemAR(texto);
        }
        /// <summary>
        /// Cria um novo requerente.
        /// </summary>
        /// <param name="nome">o nome do requerente</param>
        /// <param name="meioContato">o meio de contato</param>
        /// <returns></returns>
        public static IRequerente CriarRequerente(string nome, string meioContato)
        {
            return new RequerenteAR(nome, meioContato);
        }
        /// <summary>
        /// Cria uma solicitação com uma mensagem inicial.
        /// </summary>
        /// <param name="atendimento">o atendimento ao qual a solicitação pertence</param>
        /// <param name="mensagem">a mensagem incial</param>
        /// <returns></returns>
        public static ISolicitacao CriarSolicitacao(IAtendimento atendimento, ITipoSolicitacao tipo, IMensagem mensagem)
        {
            return new SolicitacaoAR(atendimento, tipo, mensagem);
        }
        /// <summary>
        /// Cria uma solicitação com uma lista de mensagens iniciais.
        /// </summary>
        /// <param name="atendimento">o antendimento ao qual a solicitação pertence</param>
        /// <param name="mensagens">as mensagens iniciais</param>
        /// <returns></returns>
        public static ISolicitacao CriarSolicitacao(IAtendimento atendimento, ITipoSolicitacao tipo, IList<IMensagem> mensagens)
        {
            return new SolicitacaoAR(atendimento,tipo, mensagens);
        }
        /// <summary>
        /// Cria um tipo de solicitação.
        /// </summary>
        /// <param name="nome">nome do tipo</param>
        /// <param name="areaNegocio">a área de negócio associada ao tipo</param>
        /// <returns></returns>
        public static ITipoSolicitacao CriarTipoSolicitacao(string nome, IAreaNegocio areaNegocio)
        {
            return new TipoSolicitacaoAR(nome, areaNegocio);
        }
    }
}
